/*
 * GWTServiceCompImpl.java
 *
 * Created on 10 de noviembre de 2009, 01:44 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package py.fpuna.ii.electiva2.server;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import py.fpuna.ii.electiva2.client.GWTServiceComp;
import py.fpuna.ii.electiva2.client.model.ProductoModel;
import py.fpuna.ii.electiva2.client.model.ProveedorModel;
import py.fpuna.ii.electiva2.dto.ProveedorDTO;
import py.fpuna.ii.electiva2.interfaces.CompraFacadeRemote;

import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import py.fpuna.ii.electiva2.client.model.CompraModel;
import py.fpuna.ii.electiva2.dto.CompraDTO;
import py.fpuna.ii.electiva2.dto.ProductoDTO;

/**
 *
 * @author Lauri
 */
public class GWTServiceCompImpl extends RemoteServiceServlet implements
        GWTServiceComp {

    public List<ProveedorModel> listarProveedores() {
        List <ProveedorModel> responseList = new ArrayList<ProveedorModel>();

        try {

            Context ctx = new InitialContext();
            CompraFacadeRemote compraFacadeR = (CompraFacadeRemote) ctx.lookup("java:comp/env/CompraFacadeBean");

            //trae la lista de clientes de la BD
            List <ProveedorDTO> provList = new ArrayList<ProveedorDTO>();

            provList = compraFacadeR.listarProveedores();

            for (ProveedorDTO prov : provList){
                ProveedorModel provmod = new ProveedorModel();
                provmod.setProvCodigo(prov.getProvCodigo());
                provmod.setProvRazonSocial(prov.getProvRazonSocial());
                provmod.setProvDireccion(prov.getProvDireccion());
                provmod.setProvTelefono(prov.getProvTelefono());
                responseList.add(provmod);
            }

            return responseList;

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceCompImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

    public List<ProductoModel> listarProductos(Integer provCode) {
        List <ProductoModel> responseList = new ArrayList<ProductoModel>();

        try {

            Context ctx = new InitialContext();
            CompraFacadeRemote compraFacadeR = (CompraFacadeRemote) ctx.lookup("java:comp/env/CompraFacadeBean");

            //trae la lista de clientes de la BD
            List <ProductoDTO> provList = new ArrayList<ProductoDTO>();

            provList = compraFacadeR.listarProductos(provCode);

            for (ProductoDTO prod : provList){
                ProductoModel prodmod = new ProductoModel();

                prodmod.setProdDescripcion(prod.getProdDescripcion());
                prodmod.setProdCodigo(prod.getProdCodigo());

                responseList.add(prodmod);
            }

            return responseList;

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceCompImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

    public String guardarCompra(CompraModel compra, Integer IDProducto)
    {
        try {
            Context ctx = new InitialContext();
            CompraFacadeRemote compraFacadeR = (CompraFacadeRemote) ctx.lookup("java:comp/env/CompraFacadeBean");


            //ha esta compra le falta el producto
            CompraDTO compradto = new CompraDTO();
            compradto.setCompCantidad(compra.getCompCantidad());
            compradto.setCompProveedor(compra.getCompProveedor());

            //el producto de la compra anterior es IDProducto
         
            String mensaje = compraFacadeR.createCompra(compradto,IDProducto);

            if (mensaje.compareTo("true")== 0)
            {
                return "true";
            }else {
                return "false";

            }
            

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "false";
    }

    public List<CompraModel> listarCompra(){
        List <CompraModel> responseList = new ArrayList<CompraModel>();

        try {

            Context ctx = new InitialContext();
            CompraFacadeRemote compraFacadeR = (CompraFacadeRemote) ctx.lookup("java:comp/env/CompraFacadeBean");

            //trae la lista de productos de la BD
            List <CompraDTO> compraList = new ArrayList();
            try {
                compraList = compraFacadeR.listarComp();
            } catch (Exception ex) {
                Logger.getLogger(GWTServiceCompImpl.class.getName()).log(Level.SEVERE, null, ex);
            }

            for (CompraDTO comp : compraList){
                CompraModel compMod = new CompraModel();
                compMod.setCompCantidad(comp.getCompCantidad());
                compMod.setCompProveedor(comp.getCompProveedor());

                //para cargar el producto de una compra
                ProductoModel prodModel = new ProductoModel();
                prodModel.setProdCodigo(comp.getCompProducto().getProdCodigo());
                prodModel.setProdCantidad(comp.getCompProducto().getProdCantidad());
                prodModel.setProdDescripcion(comp.getCompProducto().getProdDescripcion());
                prodModel.setProdPrecioCompra(comp.getCompProducto().getProdPrecioCompra());
                prodModel.setProdPrecioVenta(comp.getCompProducto().getProdPrecioVenta());
                    //cargamos el proveedor de un producto
                ProductoDTO prod = comp.getCompProducto();
                ProveedorModel provModel = new ProveedorModel();
                provModel.setProvCodigo(prod.getProdProveedor().getProvCodigo());
                provModel.setProvDireccion(prod.getProdProveedor().getProvDireccion());
                provModel.setProvRazonSocial(prod.getProdProveedor().getProvRazonSocial());
                provModel.setProvTelefono(prod.getProdProveedor().getProvTelefono());

                prodModel.setProdProveedor(provModel);

                //seguimos cargando la compra
                compMod.setCompProducto(prodModel);


                responseList.add(compMod);
            }

            return responseList;

        } catch (NamingException ex) {
            Logger.getLogger(GWTServiceProdImpl.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }


}
